package com.note.app.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.note.common.domain.CollaborationParticipant;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import java.util.List;

/**
 * 协作参与者Mapper接口
 */
@Mapper
public interface CollaborationParticipantMapper extends BaseMapper<CollaborationParticipant> {
    
    /**
     * 查询会话的所有参与者
     *
     * @param sessionId 会话ID
     * @return 参与者列表
     */
    @Select("SELECT * FROM collaboration_participant WHERE session_id = #{sessionId}")
    List<CollaborationParticipant> selectBySessionId(@Param("sessionId") Long sessionId);
    
    /**
     * 查询会话参与者数量
     *
     * @param sessionId 会话ID
     * @return 参与者数量
     */
    @Select("SELECT COUNT(*) FROM collaboration_participant WHERE session_id = #{sessionId}")
    int countBySessionId(@Param("sessionId") Long sessionId);
    
    /**
     * 查询用户在会话中的参与记录
     *
     * @param sessionId 会话ID
     * @param userId 用户ID
     * @return 参与记录
     */
    @Select("SELECT * FROM collaboration_participant WHERE session_id = #{sessionId} AND user_id = #{userId} LIMIT 1")
    CollaborationParticipant selectBySessionIdAndUserId(@Param("sessionId") Long sessionId, @Param("userId") Long userId);
    
    /**
     * 更新参与者角色
     *
     * @param id 记录ID
     * @param role 角色
     * @return 影响行数
     */
    @Update("UPDATE collaboration_participant SET role = #{role} WHERE id = #{id}")
    int updateRole(@Param("id") Long id, @Param("role") Integer role);
    
    /**
     * 更新参与者在线状态
     *
     * @param id 记录ID
     * @param isOnline 是否在线
     * @return 影响行数
     */
    @Update("UPDATE collaboration_participant SET is_online = #{isOnline} WHERE id = #{id}")
    int updateOnlineStatus(@Param("id") Long id, @Param("isOnline") Integer isOnline);
    
    /**
     * 更新光标位置
     *
     * @param id 记录ID
     * @param cursorPosition 光标位置
     * @return 影响行数
     */
    @Update("UPDATE collaboration_participant SET cursor_position = #{cursorPosition} WHERE id = #{id}")
    int updateCursorPosition(@Param("id") Long id, @Param("cursorPosition") String cursorPosition);
} 